﻿using System.Collections.Generic;

namespace AzureDiagMon.Common.Algorithms.FragmentedRanges
{
    public interface IFragmentedRange : IFragmentedRangeSection
    {
        /// <summary>
        /// Strategy to get the next section
        /// </summary>
        IFragmentedRangeResolverStrategy ResolverStrategy { get; set; }

        /// <summary>
        /// Gets the list of already loaded sections
        /// </summary>
        IEnumerable<IFragmentedRangeSection> LoadedSections { get; }

        /// <summary>
        /// Gets Current View Section
        /// </summary>
        IFragmentedRangeSection CurrentViewSection { get; }

        /// <summary>
        /// List empty sections
        /// </summary>
        /// <returns></returns>
        IEnumerable<IFragmentedRangeSection> GetEmptySections();

        /// <summary>
        /// Returns the next section to load
        /// </summary>
        /// <returns></returns>
        IFragmentedRangeSection GetNextSection();

        /// <summary>
        /// Returns the list of merged sections
        /// </summary>
        /// <returns></returns>
        IEnumerable<IFragmentedRangeSection> GetConsolidatedSections();

        /// <summary>
        /// Returns the next section to load
        /// </summary>
        /// <returns></returns>
        IEnumerable<IFragmentedRangeSection> GetAllSections();


    }
}